Skip to content

Chore/dependency upgrade 2026 01 23 - #365

Open
WhiteFang5 wants to merge 17 commits into
PoE-Overlay-Community:masterfrom
ezroar:chore/dependency-upgrade-2026-01-23
Open

Chore/dependency upgrade 2026 01 23#365
WhiteFang5 wants to merge 17 commits into
PoE-Overlay-Community:masterfrom
ezroar:chore/dependency-upgrade-2026-01-23

Conversation

@WhiteFang5

Copy link
Copy Markdown
Member

Description

This madlad did the unthinkable and upgraded the stack. Praise to this guy and this detailed summary of the changes made:
https://github.com/ezroar/PoE-Overlay-Community-Fork/blob/chore/dependency-upgrade-2026-01-23/UPGRADE-SUMMARY.md

ezroar and others added 17 commits January 23, 2026 18:03
- Deleted stale package-lock.json that referenced old robotjs/iohook
- Regenerated with new @jitsi/robotjs and uiohook-napi dependencies
- Updated karma-base.conf.js: karma-coverage-istanbul-reporter → karma-coverage
- Renamed structure.type.d.ts → structure.type.ts for proper module export

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Update ElectronProvider API usage (provideIpcRenderer → provideElectronAPI)
- Fix Angular Material mat-slider to new API with matSliderThumb input
- Migrate _theme.scss to Angular Material v15+ theming with @use syntax
- Fix JSON imports to use default imports instead of named exports
- Add Subject<void> type parameters for RxJS strict mode
- Add $any() casts for strict template type checking
- Rename .d.ts type files to .ts for proper module exports
- Remove deprecated Node.js util import (isNullOrUndefined)
- Fix zone.js import path for newer version

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add electron/preload.ts to tsconfig.serve.json so it gets compiled
  (preload is a separate entry point, never imported by main.ts)
- Fix preload path in main.ts to always use electron/preload.js
- Replace custom-electron-titlebar with HTML titlebar in settings
  window (window.require() unavailable with contextIsolation: true)
- Add cross-window IPC forwarding in main.ts for thread control
  channels (thread-pause, settings-changed, etc.)
- Add missing channels to preload send() whitelist

Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Use cross-env for NODE_OPTIONS in package.json scripts (cross-platform)
- Fix ESLint/TSLint errors: switch-case scoping, strict equality,
  Object -> object type, no-input-rename directive
- Fix RxJS variable hoisting issues in stash-grid.service.ts
- Fix async pipe negation in evaluate-dialog template
- Update test infrastructure: remove require.context, add mock
  ElectronAPI and LocalForage providers, add test specs for services
- Add @app/testing path alias in tsconfig.json

Co-Authored-By: Claude Opus 4.6 <[email protected]>
When windowSetAlwaysOnTop(false) is called without a level, the
preload sends undefined as the level arg. Electron 28's native
setAlwaysOnTop validates arg 2 as a string when 3 args are passed,
throwing "A string was expected". Only pass level/relativeLevel when
level is truthy.

Also harden shell-open-external and log handlers with type guards.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
The old custom robotjs fork accepted Windows virtual key codes as
numbers (e.g. 0x43 for 'C'). The new @jitsi/robotjs requires string
key names (e.g. 'c'). Add a VK-to-key-name mapping to convert numeric
codes before passing them to robotjs.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Replace debounce(() => EMPTY) with debounce(() => timer(0)) in overlay
  visibility pipeline. RxJS 7 changed debounce behavior: inner observable
  completion no longer emits buffered values, causing window.show() to
  never fire.
- Add font:inherit to item-frame-value-input so ch-based width calculation
  matches the actual rendered font, fixing clipped stat numbers.
- Fix requestAccessibility() crash guard for non-macOS platforms.
- Fix send() error handler referencing wrong variable name (args vs
  additionalArgs).
- Add debug logging for game detection, shortcut registration, and
  window show/hide (throttled to avoid log spam).

Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Use showInactive() instead of show() for the overlay window to prevent
  stealing focus from PoE, which caused a rapid active/inactive flashing
  loop.
- Coerce poe.active to boolean (!!poe.active) before sending via IPC to
  avoid Electron 28 serialization failure on undefined values.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
…ections

Update all CSS selectors from legacy .mat-* to .mat-mdc-* for Angular Material
v15+ MDC migration. Fix unhandled promise rejections in auto-updater and main
process (loadURL, shell.openExternal). Fix isMinimized property→method call,
child window close handler null safety, and tray double-click crash.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Only apply the custom PoEOverlayCommunityFork user-agent to API and XHR
requests. Page loads (login, trade search) now use the default Chromium
user-agent, preventing Cloudflare from flagging them as bot traffic.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Cloudflare's JS challenge also checks navigator.userAgent, not just the
HTTP header. Remove "Electron/x.x.x" and "poe-overlay/x.x.x" from the
in-page user agent on spawned BrowserWindows so login pages pass
Cloudflare verification.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
… import

Cloudflare Turnstile blocks Electron's embedded browser from completing
verification. Instead, open the PoE login page in the user's default
browser and let them paste their POESESSID cookie to authenticate.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Bump version 0.8.39 → 0.9.0 to reflect the major dependency upgrade
  (Electron 8→28, Angular 9→17, new IPC architecture, native module replacements)
- Add CHANGELOG entry for 0.9.0
- Fix evaluate-dialog: default privateLeague$ to false; add null-safety and
  error handler in checkPrivateLeague() so a failed league lookup doesn't
  leave the flag in an incorrect state

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- karma-base.conf.js: add headless Chrome flags for WSL compatibility
- spec_helper.spec.ts: add global beforeEach(resetTestingModule) so the
  TestBed instantiated by beforeAll doesn't block the first spec from
  calling configureTestingModule
- mock-electron-api.ts: add missing setSessionCookie/getSessionCookie spies
- 7 component specs: migrate ElectronProviderFake from Electron 8 IPC API
  (provideRemote/provideIpcRenderer) to new provideElectronAPI()
- user-settings-form.component.spec.ts: use MockElectronProvider instead of
  null-returning fake (AppService.isAutoLaunchEnabled calls electronAPI.once)
- evaluate-dialog.component.spec.ts: fix MatDialogRef null -> {close: ()=>{}}
- item-price-prediction.service.spec.ts: correct mock currencyId 'exalted'
  -> 'exa' to match mock data; add leagueId: 'Delirium' to context init
- item-search-analyze.service.spec.ts: add leagueId: 'Delirium' to context init
- window.service.spec.ts: add explicit resetTestingModule in beforeEach

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
@WhiteFang5 WhiteFang5 self-assigned this Mar 6, 2026
@wratho

wratho commented Mar 6, 2026

Copy link
Copy Markdown
Collaborator

ack, will review in detail after league launch dies down. incredible work @ezroar

Comment thread main.ts
Comment thread src/app/layout/page/user-settings/user-settings.component.html
Comment thread package.json
this.electronAPI.registerGlobalShortcut(shortcut.accelerator)
} else {
this.electronAPI.registerGlobalShortcut(shortcut.accelerator)
this.electronAPI.on(`shortcut-${shortcut.accelerator}`, () => {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure on this part of the code, it seems like there's no longer a difference between passive and non-passive shortcuts.
If it's intended, then the entire passive variable should be removed.
Obviously all passive features need to be tested (I think it's only the mouse wheel scrolling for stash tabs; if that no longer works, we should remove the feature).

Comment thread CLAUDE.md

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file should probably be removed before merge

Comment thread WINDOWS-DEV-SETUP.md

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The versions in this file seem wrong.

Node 12 doesn't match versions mentioned above. I would expect 18+.

I would also guess Python 3? We should investigate this file

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm removing this file, there's a more generic developer readme anyway.

Comment thread UPGRADE-SUMMARY.md

Due to the scope of changes, manual testing is critical:

### Basic Functionality

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of these aren't X'd off Does that mean it failed testing?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure, we'll be testing it anyway before publishing an alpha. On a side note, I'm removing this .md file and moving the contents to the PR body instead

}
})

this.electronAPI.once('browser-window-ready', (_, id) => {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this was already set on line 68?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Different method (open vs openAndWait) -> i.e. both are needed and should stay.

<div class="col-4">
<mat-form-field>
<mat-label>POESESSID</mat-label>
<input matInput [(ngModel)]="poesessid" type="password" />

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what are we doing with the SESSID?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nvm, i see below. an alternative way of logging in.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, we will not be adding poesessid support because this is highly discouraged/"forbidden" by GGG.

*/
public showStashGrid(...stashGridOptions: StashGridOptions[]): Observable<boolean> {
const promise = new Promise<boolean>((resolve, reject) => {
let sub: Subscription

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

naming the subscriptions would be helpful for later

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants